
// const hello = 'hello world!'
// // string 转 数组
// // 1. split
// const helloArray1 = hello.split('')
// console.info(helloArray1)
// // 2. ... 扩展运算符
// const helloArray2 = [...hello]
// console.info(helloArray2)
// // 3. Array.form
// const helloArray3 = Array.from(hello)
// console.info(helloArray3)


// 
// 
/**
 * 箭头函数 与 普通函数
 * 区别：
 * 1. 箭头函数没有prototype 因为没用this
 * 2. 箭头函数不是构造函数 不能使用new
 * 3. 箭头函数没有arguments
 * 4. 箭头函数不能使用yield
 * 5. 箭头函数不能使用 bind call
 */



/**
 * 模拟获取数据
 */
function fetchData(times) {
  // 随机延时 0ms~2000ms
  const delay = Math.round(Math.random()*2000)
  // 10%的概率失败 90%的成功率
  const isSuccess = Math.random() > 0.1
  return new Promise((resolve) => {
    const timeout = setTimeout(() => {
      clearTimeout(timeout)
      // 默认false
      const result = {
        code: 200,
        data: null,
        message: 'fail',
        delay: delay
      }
      if (isSuccess) {
        result.message = 'success'
        result.data = times + '-' + Math.random().toString(16).substring(2)
        resolve(result)
      } else {
        result.data = times + '-' + null
        resolve(result)
      }
    }, delay)
  })
}

// 使用生成器 获取10次数据
function* hexadecimalString(times) {
  for (let index = 0; index < times; index++) {
    try {
      yield fetchData(index)
    } catch (error) {
     console.info(error) 
    }
  }
}

function executeTimes() {
  const datas = []
  const getHexadecimalString = hexadecimalString(10)
  while(true) {
    const { value, done } = getHexadecimalString.next()
    if (done) {
      break
    }
    value.then(res => {
      console.info(res)
    })
  }
}

executeTimes()


/** 无限循环 */
// function* infinite() {
//   let index = 0
//   while(true) {
//     yield index++
//   }
// }
// const generator = infinite()

// for (let index = 0; index < 10; index++) {
//   console.info(generator.next().value)
// }
// let numbers = 1
// for(;;) {
//   numbers++
//   console.info(numbers)
// }